Skip to content

docs(agent): clarify cmp.Diff usage and test assertion examples in go-coding-rule - #974

Merged
kyasbal merged 2 commits into
GoogleCloudPlatform:mainfrom
kyasbal:push-mmtktqtylrsv
Sep 8, 2026
Merged

docs(agent): clarify cmp.Diff usage and test assertion examples in go-coding-rule#974
kyasbal merged 2 commits into
GoogleCloudPlatform:mainfrom
kyasbal:push-mmtktqtylrsv

Conversation

@kyasbal

@kyasbal kyasbal commented Sep 8, 2026

Copy link
Copy Markdown
Member

Summary

Refines the test assertion rules and table-driven test examples in .agents/rules/go-coding-rule.md.

Previously, the example in go-coding-rule.md used cmp.Diff to compare simple single-line strings ("foo" vs "bar"). This led AI agents and contributors to mistakenly use cmp.Diff for comparing scalar values (such as single integers, booleans, and single-line strings).

Details of Changes

  • Clarified that scalar values (int, bool, float, single-line string, enum) must be compared directly using equality operators (== or !=) and reported in got, want format via t.Errorf. cmp.Diff must not be used for scalar values.
  • Reaffirmed that cmp.Diff from github.com/google/go-cmp/cmp is required for comparing complex types (structs, slices or maps of structs, nested structures).
  • Formally documented the exception that cmp.Diff is permitted for a single string variable if and only if it spans multiple lines (e.g., generated YAML, JSON, or multiline text blocks) where line-by-line diffing is beneficial.
  • Replaced the single misleading example with three clear and idiomatic examples:
    1. Scalar comparison with != and t.Errorf.
    2. Complex struct comparison with cmp.Diff.
    3. Multiline string comparison exception.

@kyasbal kyasbal added type:docs Improvements or additions to documentation area:agent AI agent skills, rules, and prompt workflows labels Sep 8, 2026
@kyasbal
kyasbal requested a review from K53 as a code owner September 8, 2026 13:09

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the Go coding rules in .agents/rules/go-coding-rule.md to provide clearer guidelines on test assertions, distinguishing between scalar values (which should use direct equality operators) and complex types or multiline strings (which must use cmp.Diff). It also adds detailed table-driven test examples for these patterns. The reviewer suggested a critical correction to clarify that cmp.Diff must be used for all slices and maps, not just those of structs, since Go does not support direct equality comparison (== or !=) on slices and maps.

Comment thread .agents/rules/go-coding-rule.md Outdated
@kyasbal
kyasbal enabled auto-merge September 8, 2026 13:15
@kyasbal
kyasbal added this pull request to the merge queue Sep 8, 2026
Merged via the queue into GoogleCloudPlatform:main with commit 7a94157 Sep 8, 2026
17 checks passed
@kyasbal
kyasbal deleted the push-mmtktqtylrsv branch September 8, 2026 13:24
kyasbal added a commit that referenced this pull request Sep 9, 2026
…ives in coretask (#972)

* chore(github): reorganize issue and PR label taxonomy (#971)

* chore(github): reorganize issue and PR label taxonomy

Reorganize GitHub issue and PR label system to improve discoverability,
triage ergonomics, and release automation alignment:
- Update .github/release.yml changelog categories to use new label names (type:feature, type:bug, type:perf, type:refactor, area:cicd, area:devenv, type:docs, type:chore).
- Configure .github/ISSUE_TEMPLATE/bug-report.md with default labels "type:bug, status:needs-triage".
- Configure .github/ISSUE_TEMPLATE/feature-request.md with default labels "type:feature, status:needs-triage".

* fix(github): separate maintenance and dependencies categories in release notes

* feat(k8sevent): replace resource UIDs with readable names in event summaries (#973)

* feat(k8sevent): replace resource UIDs with readable names in event summaries

- Add ResourceIdentity.SummaryTag() method to format resources as readable tags
- Replace matched resource UIDs in Kubernetes event messages with readable tags in both GKE and OSS log ingesters
- Map matched resource UIDs to corresponding resource timelines in ProcessLogByGroup
- Add HasEventCount assertion helper to TimelineChangeSetAsserter

* fix(review): address review comments on deduplicating formatEventSummary and HasEventCount

* docs(agent): clarify cmp.Diff usage and test assertion examples in go-coding-rule (#974)

* docs(agent): clarify cmp.Diff usage and test assertion examples in go-coding-rule

* fix(agent): address review comments on collections comparison in go-coding-rule

* feat(task): add edge attributes and dependency descriptors to taskid

* feat(task): redefine Task interface, dependencies, and builder primitives in coretask

* fix(task): address PR review comments on PR #972

* feat(task): add priority options and multi-stage execution labels for FanIn dependencies
kyasbal added a commit that referenced this pull request Sep 11, 2026
* chore(github): reorganize issue and PR label taxonomy (#971)

* chore(github): reorganize issue and PR label taxonomy

Reorganize GitHub issue and PR label system to improve discoverability,
triage ergonomics, and release automation alignment:
- Update .github/release.yml changelog categories to use new label names (type:feature, type:bug, type:perf, type:refactor, area:cicd, area:devenv, type:docs, type:chore).
- Configure .github/ISSUE_TEMPLATE/bug-report.md with default labels "type:bug, status:needs-triage".
- Configure .github/ISSUE_TEMPLATE/feature-request.md with default labels "type:feature, status:needs-triage".

* fix(github): separate maintenance and dependencies categories in release notes

* feat(k8sevent): replace resource UIDs with readable names in event summaries (#973)

* feat(k8sevent): replace resource UIDs with readable names in event summaries

- Add ResourceIdentity.SummaryTag() method to format resources as readable tags
- Replace matched resource UIDs in Kubernetes event messages with readable tags in both GKE and OSS log ingesters
- Map matched resource UIDs to corresponding resource timelines in ProcessLogByGroup
- Add HasEventCount assertion helper to TimelineChangeSetAsserter

* fix(review): address review comments on deduplicating formatEventSummary and HasEventCount

* docs(agent): clarify cmp.Diff usage and test assertion examples in go-coding-rule (#974)

* docs(agent): clarify cmp.Diff usage and test assertion examples in go-coding-rule

* fix(agent): address review comments on collections comparison in go-coding-rule

* feat(googlecloudk8scommon): default kind filter to all kinds except leases (#975)

* feat(timeline): allow inline editing of search filter chips on click (#977)

* feat(timeline): allow inline editing of search filter chips on click

Enable in-place editing of search filter chips in ChipSearchBarComponent
when clicked. Clicking a chip renders an inline text input with text
pre-selected and auto-focused. Changes can be committed with Enter or blur,
or cancelled with Escape. Delimiter splitting and whitespace removal are
supported.

* fix(review): address review comments on blur race condition and focus preservation

* fix(inspection): resolve timezone offset fallback to UTC by unifying to timezoneShiftHours (#978)

Following the Connect-RPC migration (#908), the timezone shift parameter
was updated in Protobuf and backend RPC handlers to timezoneShiftHours
(float64). However, TimeZoneShiftInputTask and the frontend InspectionClient
retained references to the legacy timezoneShift key, causing inspections
to always fall back to UTC time.

This change:
- Unifies the context key to TaskInputKeyTimezoneShiftHours in inspectioncore
- Updates TimeZoneShiftInputTask to read TaskInputKeyTimezoneShiftHours
- Updates backend-api.service.ts and its test to use timezoneShiftHours
- Updates parser_test.go to float64(9)
- Adds unit tests for TimeZoneShiftInputTask

* fix(k8saudit): preserve immutable identity metadata after truncated logs (#979)

* fix(k8saudit): preserve immutable identity metadata after truncated logs

When Kubernetes audit logs contain truncated responses (audit.k8s.io/truncated: "true"),
groupManifestGenerator reset prevRevisionReader to nil. Subsequent patch requests merged
into an empty map reader, causing metadata.uid to be lost. Later tasks interpreted the
missing UID as a new resource creation, incorrectly emitting a ChangeEventTypeCreation
event and overwriting the initial revision at creationTimestamp.

This commit updates manifest_generator_task to preserve immutable identity metadata
(apiVersion, kind, metadata.name, metadata.namespace, metadata.uid, metadata.creationTimestamp)
upon encountering truncated logs so that subsequent patches retain the resource identity.

* fix(k8saudit): return preserved immutable identity reader for truncated log body

When a log is truncated, groupManifestGenerator now returns the preserved immutable
identity reader as ResourceBodyReader rather than nil. This allows the truncated log
itself to retain its immutable identity metadata in the generated timeline revision,
preventing the resource body from appearing completely empty in the UI and downstream
tasks.

* feat(cicd): support manual tag and release draft generation via workflow_dispatch (#980)

* feat(cicd): support manual tag creation and release draft generation via workflow_dispatch

Add a workflow_dispatch trigger to .github/workflows/release.yaml, allowing
maintainers to initiate tag creation and release draft generation directly from
the GitHub Actions Web UI without local terminal operations.

- Accept a required tag_name input parameter (e.g., v1.2.3 or v1.2.3-beta-1)
- Validate tag format and verify uniqueness via git ls-remote before starting builds
- Create and push the Git tag after successful binary compilation
- Automatically generate release notes from categorised commit history

* fix(cicd): pass step outputs via env to prevent template injection

* refactor(inspection): remove legacy LabelKeyInspectionTypes and InspectionTypeLabel (#981)

Remove deprecated LabelKeyInspectionTypes, InspectionTypeLabel, and
legacy fallback logic from inspection runner. Update tests and
documentation to use InspectionTypeLabelSelector.

* feat(inspection): set default environment name in composer form (#982)

Add WithDefaultValueFunc to InputComposerEnvironmentNameTask so that
when Composer environments are fetched via autocomplete, the first
environment is automatically selected as the default value if no
previous selection was made.

---------

Co-authored-by: kept1994 <keigof@google.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:agent AI agent skills, rules, and prompt workflows type:docs Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant